﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ControlsLib;
using GestionePolveriLib.BL;
using BrightIdeasSoftware;
using GestionePolveriLib.Facades;
using GestionePolveri2.Filters;
using FrameworkLib.Facades.Paging;
using FrameworkLib.Filters;
using GestionePolveri2.DAL;
using GestionePolveriLib.Utilities;
using GestionePolveriLib.Facades.Extensions;
using GestionePolveriLib.BL.FilterBags;
using FrameworkLib.Configurations.FormsConfiguration;
using FrameworkLib.Configurations.FormsConfiguration.BL;
using FrameworkLib.Utilities.Export;

namespace GestionePolveri2
{
    public partial class ComposizioneColoreManagerExt4 : ComposizioneColoreBaseExt4
    {
        private static Color COLORE_RIGA1 = Color.White;
        private static Color COLORE_RIGA2 = Color.Lavender;

        private ComposizioneColoreFacadeExt pf = null;
        private ComposizioneColoreExt m_composizioneFormula = null;
        private Formula m_formula = null;
        private string m_oldCodiceColore = string.Empty;
        private Color m_oldColor = COLORE_RIGA1;
        private string[] columnsToHide = null;
        private bool m_showGroups = false;
        private bool m_cancellazioneParziale = false;

        private string m_reportComposizioneColoreRaggruppamento = "ReportComposizioneColoreRaggruppamento";
        private string m_reportComposizioneColoreRaggruppamento2 = "ReportComposizioneColoreRaggruppamento2";
        private string m_reportComposizioneColoreRaggruppamento4 = "ReportComposizioneColoreRaggruppamento4";
        private string m_reportComposizioneColoreSingolaLinea = "ReportComposizioneColoreSingolaLinea";

        public bool ShowGroups
        {
            get { return m_showGroups; }
            set 
            { 
                m_showGroups = value;

                this.objectListView1.ShowGroups = m_showGroups;
            }
        }


        public ComposizioneColoreManagerExt4()
        {
            InitializeComponent();
        }

        public override void InitializeForm()
        {
            System.Security.Principal.IPrincipal m_operatore = System.Threading.Thread.CurrentPrincipal;
            string[] roles = System.Web.Security.Roles.GetRolesForUser(m_operatore.Identity.Name);

            SavingConfigurationBag scb = new SavingConfigurationBag();
            scb.FormName = this.Name;
            scb.RoleName = roles[0];
            this.SavingConfigurationBag = scb;

            base.InitializeForm();

            if (!this.DesignMode)
            {
                //this.objectListView1.ShowGroups = true;

                this.ShowCNFGMenu = true;

                this.splitContainer1.Panel2Collapsed = true;

                this.AddCustomButton("btnAssociaPolvere", "Nuova Formula");
                this.AddCustomButton("btnExportToExcel", "Esporta in Excel");
                this.AddCustomButton("btnStampa", "Stampa");

                pf = new ComposizioneColoreFacadeExt();

                this.CanModify = true;
                this.ShowOnlyCustomButton = true;
                //this.AllowNormalButtonManagment = true;
                this.ButtonClicked += new EventHandler<CustomEventArgs<Formula>>(Anagrafica_ButtonClicked);
                this.ItemSelected += new EventHandler<CustomEventArgs<Formula>>(Anagrafica_ItemSelected);
                this.CustomButtonClicked += new EventHandler<CustomEventArgs<Formula>>(Anagrafica_CustomButtonClicked);
                
                this.objectListView1.FormatRow += new EventHandler<FormatRowEventArgs>(objectListView1_FormatRow);
                // using pager...
                //this.ShowPager = true;
                //pf.Pager = this.Pager;
                //this.Pager.PageChanged += new EventHandler<NavigationEventArgs>(Pager_PageChanged);
                //this.Pager.InitializeControl();

                //pf.GetNumberOfPages();

                this.contextMenuStrip1.ItemClicked += new ToolStripItemClickedEventHandler(contextMenuStrip1_ItemClicked);

                this.ShowFilterTracing = true;

                this.Filter.EnableDatesChooser = false;

                // forziamo la form ad aprirsi con un filtro impostato...
                //if (m_OperatorePrincipale.IsInRole("Produzione"))
                //{
                //    this.IsFiltering = true;
                //    this.Filter.FilterBag.IndicazionePolvere = IndicazionePolvere.Ufficiale;
                //    this.Filter.FilterBag.Applicazione = "b";
                //}
                this.Filter.FilterBag.IDColore = -1;
                this.Filter.FilterBag.Tipo = PolvereTypes.Normali;
                this.Filter.FilterBag.Pianolavori = PianoLavori.PianoLavoriOnly;

                InizializzaDati();

                ManageData();
            }

            CreateGroupHeaderFormatters();

            //RefreshColumns();
        }

        void objectListView1_FormatRow(object sender, FormatRowEventArgs e)
        {
            Formula cc = (Formula)((OLVListItem)e.Item).RowObject;

            if (cc.ComposizioneFormulaXLoad.Colore.CodiceColore != m_oldCodiceColore)
            {
                m_oldCodiceColore = cc.ComposizioneFormulaXLoad.Colore.CodiceColore;
                m_oldColor = (m_oldColor == COLORE_RIGA1 ? COLORE_RIGA2 : COLORE_RIGA1);
            }

            e.Item.BackColor = m_oldColor;
        }

        private void CreateGroupHeaderFormatters()
        {
            this.olvColumnCodiceColore.GroupFormatter = delegate(OLVGroup group, GroupingParameters parms) {               
                group.Header = string.Format("Codice colore: {0}", group.Key);
            };
        }

        private void InizializzaDati()
        {
            OperatorePrincipal m_operatore = (OperatorePrincipal)System.Threading.Thread.CurrentPrincipal;
            if (m_operatore.IsInRole("Amministrazione"))
            {
                this.IsFiltering = true;
                this.Filter.FilterBag.IndicazionePolvere = IndicazionePolvere.Ufficiale;
                this.EnableButton("btnNew", false);
                this.EnableButton("btnAdd", false);
            }

            if (m_operatore.IsInRole("Acquisti") || m_operatore.IsInRole("Direzione"))
            {
                this.IsFiltering = true;
                this.Filter.FilterBag.IndicazionePolvere = IndicazionePolvere.Ufficiale;

                this.objectListView1.AllColumns.Remove(this.olvColumnDescrizioneFormula);

                this.objectListView1.RebuildColumns();

                columnsToHide = new string[] {
                                 this.olvColumnDescrizioneFormula.AspectName
                };

                this.EnableButton("btnAssociaPolvere", false);
                this.EnableButton("btnModify", false);
                this.EnableButton("btnDelete", false);
                this.EnableButton("btnAdd", false);
                this.EnableButton("btnNew", false);
                this.EnableButton("btnCancel", false);
            }

            if (m_operatore.IsInRole("Verniciatura"))
            {
                this.IsFiltering = true;
                this.Filter.FilterBag.IndicazionePolvere = IndicazionePolvere.Ufficiale;

                this.objectListView1.AllColumns.Remove(this.olvColumnDataCreazione);
                this.objectListView1.AllColumns.Remove(this.olvColumnDescrizioneFormula);
                this.objectListView1.AllColumns.Remove(this.olvColumnPrezzo);

                this.objectListView1.RebuildColumns();

                columnsToHide = new string[] {
                                 this.olvColumnDescrizioneFormula.AspectName
                };

                this.EnableButton("btnExportToExcel", false);
                this.EnableButton("btnAssociaPolvere", false);
                this.EnableButton("btnModify", false);
                this.EnableButton("btnDelete", false);
                this.EnableButton("btnAdd", false);
                this.EnableButton("btnNew", false);
                this.EnableButton("btnCancel", false);
            }

            if (m_operatore.IsInRole("Produzione"))
            {
                this.IsFiltering = true;
                this.Filter.FilterBag.IndicazionePolvere = IndicazionePolvere.Ufficiale;
                //this.Filter.FilterBag.Applicazione = "b";

                //this.objectListView1.AllColumns.Remove(this.olvColumnPolvereNote);
                //this.objectListView1.AllColumns.Remove(this.olvColumnFornitore);
                //this.objectListView1.AllColumns.Remove(this.olvColumnPolvere);
                ////this.objectListView1.AllColumns.Remove(this.olvColumnNote);
                //this.objectListView1.AllColumns.Remove(this.olvColumnUfficiale);
                //this.objectListView1.AllColumns.Remove(this.olvColumnSuperata);
                this.objectListView1.AllColumns.Remove(this.olvColumnDescrizioneFormula);
                this.objectListView1.AllColumns.Remove(this.olvColumnDataCreazione);
                //this.objectListView1.AllColumns.Remove(this.olvColumnApplicazione);
                this.objectListView1.AllColumns.Remove(this.olvColumnPrezzo);

                this.objectListView1.RebuildColumns();

                columnsToHide = new string[] {
                                 this.olvColumnFornitore.AspectName,
                                 this.olvColumnPolvere.AspectName,
                                 //this.olvColumnNote.AspectName,
                                 this.olvColumnUfficiale.AspectName,
                                 this.olvColumnSuperata.AspectName,
                                 this.olvColumnDescrizioneFormula.AspectName,
                                 this.olvColumnApplicazione.AspectName
                };

                m_reportComposizioneColoreRaggruppamento = "ReportComposizioneColoreRaggruppamento";
                m_reportComposizioneColoreRaggruppamento2 = "ReportComposizioneColoreRaggruppamento2";
                m_reportComposizioneColoreRaggruppamento4 = "ReportComposizioneColoreRaggruppamento4";
                m_reportComposizioneColoreSingolaLinea = "ReportComposizioneColoreSingolaLinea";

                this.EnableButton("btnExportToExcel", false);
                this.EnableButton("btnAssociaPolvere", false);
                this.EnableButton("btnNew", false);
                this.EnableButton("btnDelete", false);
                this.EnableButton("btnModify", false);
                this.EnableButton("btnCancel", false);
            }
        }

        public override void OnFilterExecuted()
        {
            base.OnFilterExecuted();

            this.IsFiltering = true;

            ManageData();
        }

        public override void OnFilterReset()
        {
            base.OnFilterReset();

            this.IsFiltering = false;

            ManageData();
        }

        public override void OnRefreshFilterData()
        {
            base.OnRefreshFilterData();

            ManageData();
        }

        //public override void OnRefreshFilterData()
        //{
        //    // override it only if you want to do custom reload of data...
        //    base.OnRefreshFilterData();
        //}

        private new void ManageData()
        {
            // maschera particolare, abbiamo sempre un filtro attivo...
            LoadData(this.Filter.FilterBag);

            //if (!this.IsFiltering)
            //{
            //    LoadData(false);
            //}
            //else
            //{
            //    LoadData(this.Filter.FilterBag);
            //}
        }

        private void LoadData(bool selectLast)
        {
            
            //pf.RunAsync<List<ComposizioneColore>>(()=>pf.GetComposizioneColore2(), (result) =>
            //pf.RunAsync<List<ComposizioneColore>>(() => pf.GetDatiOnSingleLine(), (result) =>
            //pf.RunAsync<List<ComposizioneColore>>(() => pf.GetDatiComposizioneColore(), (result) =>
            pf.RunAsync<List<Formula>>(() => pf.GetDatiComposizioneColoreFormule(), (result) =>
            {
                if (result != null)
                {
                    this.objectListView1.AddDecoration(new EditingCellBorderDecoration { UseLightbox = true });
                    this.objectListView1.SetObjects((List<Formula>)result, true);

                    this.SetGridItemSelected(0);
                }
                else
                {
                    this.objectListView1.Items.Clear();
                    this.objectListView1.EmptyListMsg = "Nessun Dato Trovato!";

                    this.ResetButtons();
                    this.ClearControls(this.Controls);
                }

                m_oldColor = COLORE_RIGA1;
            });
        }

        private void LoadData(FilterBase<Formule> filter)
        {
            //pf.RunAsync<List<ComposizioneColore>>(() => pf.GetComposizioneColore2(filter), (result) =>
            pf.RunAsync<List<Formula>>(() => pf.GetDatiComposizioneColoreFormule(filter), (result) =>
            {
                if (result != null)
                {
                    List<Formula> r2 = new List<Formula>(((List<Formula>)result).Count);
                    IEnumerable<Formula> zz = (IEnumerable<Formula>)((List<Formula>)result).Where(x => x.Superata == false);

                    foreach (Formula f in (List<Formula>)result)
                    {
                        switch (((FormulaFilterBag)filter).IndicazionePolvere)
                        {
                            case IndicazionePolvere.Tutte:
                                r2.Add(new Formula() { ID = f.ID, Descrizione = f.Descrizione, DataCreazione=f.DataCreazione, ComposizioneFormulaXLoad = f.ComposizioneFormulaXLoad });
                                break;
                            case IndicazionePolvere.Ufficiale:
                                if (f.ComposizioneFormulaXLoad.Ufficiale) r2.Add(new Formula() { ID = f.ID, Descrizione = f.Descrizione, DataCreazione = f.DataCreazione, ComposizioneFormulaXLoad = f.ComposizioneFormulaXLoad });
                                break;
                            case IndicazionePolvere.Superata:
                                if (f.ComposizioneFormulaXLoad.Superata) r2.Add(new Formula() { ID = f.ID, Descrizione = f.Descrizione, DataCreazione = f.DataCreazione, ComposizioneFormulaXLoad = f.ComposizioneFormulaXLoad });
                                break;
                            default:
                                break;
                        }
                        
                    }

                    this.objectListView1.BeginUpdate();
                    this.objectListView1.AddDecoration(new EditingCellBorderDecoration { UseLightbox = true });
                    //this.objectListView1.SetObjects((List<Formula>)result, true);
                    this.objectListView1.SetObjects(r2, true);

                    //this.SetGridItemSelected(0);

                    this.objectListView1.Sort(this.olvColumnCodiceColore, SortOrder.Ascending);
                    this.objectListView1.EndUpdate();
                }
                else
                {
                    this.objectListView1.Items.Clear();
                    this.objectListView1.EmptyListMsg = "Nessun Dato Trovato!";

                    this.ResetButtons();
                    this.ClearControls(this.Controls);
                }

                m_oldColor = COLORE_RIGA1;
            });
        }

        void contextMenuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            if (e.ClickedItem.Name == conRaggruppamentoCodiceColoreToolStripMenuItem.Name)
            {
                List<Formula> result = (List<Formula>)this.objectListView1.Objects;
                List<ComposizioneColore> r2 = new List<ComposizioneColore>(result.Count);
                result.ForEach(x => r2.Add(x.ComposizioneFormulaXLoad));

                GestionePolveri2.Reports.ReportViewerDialog2 rpd2 = new GestionePolveri2.Reports.ReportViewerDialog2();
                rpd2.Datasource = r2;
                rpd2.Report = m_reportComposizioneColoreRaggruppamento;
                rpd2.ReportViewer.PrinterSettings.DefaultPageSettings.Landscape = true;
                rpd2.ShowReport();
            }

            if (e.ClickedItem.Name == conRaggruppamentoDescrizioneToolStripMenuItem.Name)
            {
                List<Formula> result = (List<Formula>)this.objectListView1.Objects;
                List<ComposizioneColore> r2 = new List<ComposizioneColore>(result.Count);
                result.ForEach(x => r2.Add(x.ComposizioneFormulaXLoad));

                GestionePolveri2.Reports.ReportViewerDialog2 rpd2 = new GestionePolveri2.Reports.ReportViewerDialog2();
                //rpd2.Datasource = this.dataGridView1.DataSource;
                rpd2.Datasource = r2.OrderBy(x=>x.ColoreDesc).OrderBy(x=>x.DescrizioneColoreDesc); //.OrderBy(x=>x.ColoreDesc);
                rpd2.Report = m_reportComposizioneColoreRaggruppamento4;
                rpd2.ReportViewer.PrinterSettings.DefaultPageSettings.Landscape = true;
                rpd2.ShowReport();
            }

            if (e.ClickedItem.Name == conRaggruppamentoFamigliaToolStripMenuItem.Name)
            {
                List<Formula> result = (List<Formula>)this.objectListView1.Objects;
                List<ComposizioneColore> r2 = new List<ComposizioneColore>(result.Count);
                result.ForEach(x => r2.Add(x.ComposizioneFormulaXLoad));

                GestionePolveri2.Reports.ReportViewerDialog2 rpd2 = new GestionePolveri2.Reports.ReportViewerDialog2();
                //rpd2.Datasource = this.dataGridView1.DataSource;
                rpd2.Datasource = r2;
                rpd2.Report = m_reportComposizioneColoreRaggruppamento2;
                rpd2.ReportViewer.PrinterSettings.DefaultPageSettings.Landscape = true;
                rpd2.ShowReport();
            }
        }

        void Anagrafica_CustomButtonClicked(object sender, CustomEventArgs<Formula> e)
        {
            #region btnStampa
            if (e.ButtonName.Equals("btnStampa", StringComparison.InvariantCultureIgnoreCase))
            {
                if (m_showGroups)
                {
                    Button btn = this.ButtonBar.GetCustomButton("btnStampa");
                    this.contextMenuStrip1.Show(btn, new Point(0, 0), ToolStripDropDownDirection.AboveRight);
                }
                else
                {
                    List<Formula> result = (List<Formula>)this.objectListView1.Objects;

                    List<ComposizioneColore> r2 = new List<ComposizioneColore>(result.Count);
                    result.ForEach(x => r2.Add(x.ComposizioneFormulaXLoad));

                    Reports.ReportViewerDialog2 rdv2 = new Reports.ReportViewerDialog2();
                    rdv2.Datasource = r2;    // pf.GetComposizioneColore2All(); // (List<ComposizioneColore>)this.objectListView1.Objects;
                    rdv2.Report = m_reportComposizioneColoreSingolaLinea;
                    //rdv2.ReportViewer.PrinterSettings.DefaultPageSettings.Landscape = true;
                    rdv2.ReportViewer.ReportError += new Microsoft.Reporting.WinForms.ReportErrorEventHandler(ReportViewer_ReportError);
                    rdv2.ShowReport();
                }

                /**/
                // stampa usando la funzione della ObjectListView...
                //BrightIdeasSoftware.ListViewPrinter lvp = new ListViewPrinter();
                //lvp.ListView = this.objectListView1;
                //lvp.Header = "Composizione Colori";
                //lvp.IsShrinkToFit = true;
                //lvp.DefaultPageSettings.Landscape = true;
                //lvp.ListFont = new System.Drawing.Font(FontFamily.GenericSerif, 8);
                //lvp.ListHeaderFormat.Font = new System.Drawing.Font(FontFamily.GenericSerif, 8);
                //lvp.PrintPreview();
            }
            #endregion

            #region Export to Excel...
            if (e.ButtonName.Equals("btnExportToExcel", StringComparison.InvariantCultureIgnoreCase))
            {
                ExportToExcel();
            }
            #endregion

            #region btnAssociaPolvere
            if (e.ButtonName.Equals("btnAssociaPolvere", StringComparison.InvariantCultureIgnoreCase))
            {
                //if (base.Current == null) return;

                CreaFormula();
            }
            #endregion
        }

        private void ExportToExcel()
        {
            CheckHideColumns();

            List<Formula> result = (List<Formula>)this.objectListView1.Objects;

            List<ComposizioneColore> r2 = new List<ComposizioneColore>(result.Count);
            result.ForEach(x => { 
                x.ComposizioneFormulaXLoad.Descrizione = x.Descrizione; 
                r2.Add(x.ComposizioneFormulaXLoad); 
            });

            if (r2 != null)
            {
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Filter = "Excel Files (.xls)|*.xls|All Files (*.*)|*.*";
                sfd.FilterIndex = 1;
                if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    string errorMessage = string.Empty;
                    if (r2.ToExcel(sfd.FileName, out errorMessage, columnsToHide))
                    {
                        MessageBox.Show("Esportazione in Excel effettuata!", "Gestione Polveri", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        MessageBox.Show(string.Format("ATTENZIONE: Si è verificato un errore: {0}", errorMessage), "Gestione Polveri", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            else
            {
                MessageBox.Show("Nessun dato da inviare in stampa.", "Gestione Polveri", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void CheckHideColumns()
        {
            if (columnsToHide == null) return;

            List<OLVColumn> columns = this.objectListView1.AllColumns;

            int index = columnsToHide.Length;

            int aSize = columnsToHide.Length;
            foreach (OLVColumn c in columns)
            {
                if (!c.IsVisible)
                {
                    aSize++;
                }
            }

            Array.Resize(ref columnsToHide, aSize);

            foreach (OLVColumn c in columns)
            {
                if (!c.IsVisible)
                {
                    string m_filedName = string.Empty;
                    m_filedName = c.AspectName;

                    if (m_filedName.Contains("ComposizioneFormulaXLoad"))
                    {
                        m_filedName = m_filedName.Replace("ComposizioneFormulaXLoad.", "");
                    }

                    columnsToHide.SetValue(m_filedName.Trim(), index++);
                }
            }
        }

        void ReportViewer_ReportError(object sender, Microsoft.Reporting.WinForms.ReportErrorEventArgs e)
        {
            Console.WriteLine(e.Exception.Message);
        }

        private void CreaFormula()
        {
            AssociaPolvereDialog apd = new AssociaPolvereDialog();
            apd.IsNew = true;
            if (apd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                if (apd.Formula != null)
                {
                    m_formula = apd.Formula;

                    m_composizioneFormula = apd.ComposizioneFormula;

                    CustomEventArgs<Formula> pp = new CustomEventArgs<Formula>(Actions.Add, m_formula);
                    Anagrafica_ButtonClicked(this, pp);
                }
            }
        }

        void Anagrafica_ButtonClicked(object sender, CustomEventArgs<Formula> e)
        {
            ComposizioneColoreFacade impf = new ComposizioneColoreFacade();
            Formula data = new Formula();

            switch (e.Action)
            {
                case Actions.Cancel:

                    break;
                case Actions.New:
                    {
                        base.ClearControls(this.Controls);

                        CreaFormula();
                    }
                    break;
                case Actions.Add:
                    {                      
                        ComposizioneColoreFacadeExt impfExt = new ComposizioneColoreFacadeExt();

                        impfExt.AddFormula(e.Item);

                        LoadData(this.Filter.FilterBag);

                        FrameworkLib.Utilities.Singleton<GestionePolveriLib.Cache.LookUpData>.Instance.Refresh();
                    }
                    break;
                case Actions.Modify:
                    {
                        data.ID = base.Current.ID;

                        AssociaPolvereDialog apd = new AssociaPolvereDialog(true);
                        apd.IsNew = false;
                        apd.IsModified = true;
                        apd.Formula = base.Current;
                        DialogResult dr = apd.ShowDialog();
                        if (dr == System.Windows.Forms.DialogResult.OK)
                        {
                            ComposizioneColoreFacadeExt impfExt = new ComposizioneColoreFacadeExt();

                            Formula obj = apd.Formula;

                            impfExt.ModifyFormula(obj);
                        }

                        LoadData(this.Filter.FilterBag);

                        FrameworkLib.Utilities.Singleton<GestionePolveriLib.Cache.LookUpData>.Instance.Refresh();
                    }
                    break;
                case Actions.Delete:
                    {
                        data.ID = base.Current.ID;

                        DialogResult result = MessageBox.Show("Puoi cancellare l'intera formula o una delle sue componenti.\nLe scelte a disposizione sono:\n\nSi: cancelli l'intera formula;\n\nNo: cancelli solo la parte di formula che indichi;\n\nAnnulla: interrompi l'operazione;", "Composizione Colori",
                                            MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);

                        switch (result)
                        {
                            case DialogResult.Abort:
                                break;
                            case DialogResult.Cancel:
                                break;
                            case DialogResult.Ignore:
                                break;
                            case DialogResult.No:
                                m_cancellazioneParziale = true;
                                e.Action = Actions.Modify;
                                //CustomEventArgs<Formula> e1 = new CustomEventArgs<Formula>(Actions.Modify, e.Item);
                                Anagrafica_ButtonClicked(sender, e);

                                m_cancellazioneParziale = false;
                                LoadData(this.Filter.FilterBag);
                                break;
                            case DialogResult.None:
                                break;
                            case DialogResult.OK:
                                break;
                            case DialogResult.Retry:
                                break;
                            case DialogResult.Yes:
                                ComposizioneColoreFacadeExt impfExt = new ComposizioneColoreFacadeExt();
                                impfExt.DeleteFormula(base.Current);

                                LoadData(this.Filter.FilterBag);
                                break;
                            default:
                                break;
                        }
                        //if (MessageBox.Show("Puoi cancellare l'intera formula o una delle sue componenti.\nVuoi cancellare l'intera formula ?", "Composizione Colori",
                        //                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                        //{
                        //    ComposizioneColoreFacadeExt impfExt = new ComposizioneColoreFacadeExt();

                        //    impfExt.DeleteFormula(base.Current);
                        //}
                        //else
                        //{
                        //    e.Action = Actions.Modify;
                        //    //CustomEventArgs<Formula> e1 = new CustomEventArgs<Formula>(Actions.Modify, e.Item);
                        //    Anagrafica_ButtonClicked(sender, e);
                        //}

                        //LoadData(this.Filter.FilterBag);
                    }
                    break;
                default:
                    break;
            }
        }

        void objectListViewColori_ItemCheck(object sender, ItemCheckEventArgs e)
        {

        }

        void objectListViewPolveri_ItemCheck(object sender, ItemCheckEventArgs e)
        {

        }

        void Anagrafica_ItemSelected(object sender, CustomEventArgs<Formula> e)
        {
            base.Current = e.Item;
        }

        //public override void OnLoadConfigurazioneMaschera()
        //{
        //    base.OnLoadConfigurazioneMaschera();

        //    this.objectListView1.RebuildColumns();
        //}

        //public override void OnRipristinaConfigurazioneDefaultMaschera()
        //{
        //    base.OnRipristinaConfigurazioneDefaultMaschera();

        //    this.objectListView1.RebuildColumns();
        //}

        //public override void OnSalvaConfigurazioneMaschera()
        //{
        //    base.OnSalvaConfigurazioneMaschera();

        //    byte[] data = this.objectListView1.SaveState();

        //    System.Security.Principal.IPrincipal m_operatore = System.Threading.Thread.CurrentPrincipal;
        //    string[] roles = System.Web.Security.Roles.GetRolesForUser(m_operatore.Identity.Name);

        //    SavingConfigurationBag scb = new SavingConfigurationBag();
        //    scb.FormName = this.Name;
        //    scb.RoleName = roles[0];

        //    ColumnsConfigurationManager ccm = new ColumnsConfigurationManager();
        //    ccm.Configuration = scb;
        //    ccm.State = data;
        //    ccm.SaveState();
        //}

        private void RefreshColumns()
        {
            ColumnsConfigurationManager ccm = new ColumnsConfigurationManager();
            byte[] state = ccm.GetState(this.Name);

            if (state != null)
            {
                bool result = this.objectListView1.RestoreState(state);
            }
        }
    }

    public class ComposizioneColoreBaseExt4 : AnagraficaManagerFilteredObjectListView<Formula, ComposizioneColoreManagerExtFilter, FormulaFilterBag> { }

    //public class ComposizioneColoreBaseExt2 : AnagraficaManagerObjectListView<ComposizioneColore2> { }
}
